 <?php

/**
 * Description of stdLoginStrategy
 *
 * @author ������
 */
class VKLoginStrategy extends LoginStrategy {

    const SHOW_EMAIL_FORM = -3;
    const SHOW_PASSWORD_FORM = -4;
    const SHOW_REG_FORM = -5;

    public function doLogin(User $user, $auth_data) {
        $vkmodel = new VKModel();
        $registry = Registry::getInstance();
        
        $registry->load->library('class.vkapi.php', 'user');
        $VK = new vkapi(VK_APP_ID, VK_APP_PASSWORD, 'http://localhost/pleasure/vklogin/');
        
        $vk_data = getSessionVariable('vk_data');
                           
        if (!$vk_data) { 
            $vk_data = $VK->getToken($auth_data['code']);
            if (!$vk_data) return false;
            if (isset($vk_data['error'])) return false;  
            setSessionVariable('vk_data', $vk_data);
        }
        //если аккаунт ВК есть в БД
        if($vkmodel->hasVKAccountInBase($vk_data['user_id']))
        {
            $registry->load->library('class.Helper_VK.php', 'user');
            $data = HelperVK::getVKMainData($VK, $vk_data['access_token']);
            $temp = $vkmodel->getVKAccountById($vk_data['user_id']);
            $user_id = $temp['user_id'];
        }
        else
        {
            if(isset($auth_data['email']))
            {
                if($user->model->hasUserInBaseByEmail($auth_data['email']))
                {
                    
                    if(isset($auth_data['password']))
                    {
                        //прикрепляем
                        $registry->load->library('class.Helper_VK.php', 'user');
                        $data = HelperVK::getVKMainData($VK, $vk_data['access_token']);
                        
                        $userdata = $user->model->getUserDataByEmail($auth_data['email']);
                        $user_id = $userdata['user_id'];

                        if($vkmodel->updateVKAccount(array('user_id'=>$user_id,'vk_id'=>$vk_data['user_id'], 'num_of_friends'=>$data['num_of_friends'], 'sex'=>$data['sex'], 'bdate'=>$data['bdate'])))
                            Event::fireEvent("message", array('message' => 'Аккаунт прикреплен'));
                         else
                            Event::fireEvent("message", array('message' => 'Ошибка прикрепления аккаунта'));
                    
                        // unsetSessionVariable('vk_password');
                        // unsetSessionVariable('vk_email');
                    }
                    else
                    {
                        //просим пароль
                        return self::SHOW_PASSWORD_FORM;
                    }
                }
                else
                {
                    //TODO: показать форму регистрации
                    if (isset($auth_data['reg_data'])) {
                        //регистрируем
                        $registry->load->library('class.Helper_VK.php', 'user');
                        $data = HelperVK::getVKMainData($VK, $vk_data['access_token']);
                        $password = md5(md5($auth_data['reg_data']['password']));
                        $user_id = $user->model->addUser($auth_data['email'], $auth_data['reg_data']['nickname'], $password);
                        $user->uploadAvatar($data['photo_big'], $user_id);
                        Event::fireEvent('message', array('message' => "Новый пользователь " . $auth_data['email'] . " добавлен в базу!"));
                    } else {
                        return self::SHOW_REG_FORM;
                    }
                     // unsetSessionVariable('vk_email');
                }
            }
            else
            {
                //просим мыло
                return self::SHOW_EMAIL_FORM;
            }
        }
        $userdata = $user->model->getUserDataById($user_id);
        $vkmodel->updateVKAccount(array('user_id'=>$user_id,'vk_id'=>$vk_data['user_id'], 'num_of_friends'=>$data['num_of_friends'], 'sex'=>$data['sex'], 'bdate'=>$data['bdate']));
        unsetSessionVariable('vk_data');
        return $this->_makeLogin($user, $userdata);
    }
}

?>
